Error Handling

  • It reminds me of Go.

f, err := os.open("my_file.txt")
if err != os.ERROR_NONE {
    // handle error
}
defer os.close(f)
// rest of code

Definitions

  • core/os/errors.odin

Panics

  • assert .

    • Can be ignored with ODIN_DISABLE_ASSERT .

    • Closes the program.

  • ensure .

    • Cannot be ignored with ODIN_DISABLE_ASSERT .

    • Is stronger than assert .

    • Closes the program.

  • panic .

    • Closes the program.

  • unimplemented .

    • ?

  • log.fatal .

    • Does not close the program.

My Old Helpers

@(require_results)
error_assert :: proc(eval: bool, loc := #caller_location, expr := #caller_expression(eval)) -> bool {
    if !eval {
        log.errorf("%v(%v): %v", loc.procedure, loc.line, expr)
    }
    return !eval
}

// Thematically it's the same as assert.
fatal_assert :: proc(eval: bool, loc := #caller_location, expr := #caller_expression(eval)) {
    if !eval {
        log.fatalf("%v(%v): %v", loc.procedure, loc.line, expr)
        runtime.trap()
            // Crashes the app.
    }
}